<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.16"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>AngelScript: asIStringFactory Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  $(document).ready(initResizable);
/* @license-end */</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  $(document).ready(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="aslogo_small.png"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">AngelScript
   </div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.16 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classas_i_string_factory.html','');});
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classas_i_string_factory-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">asIStringFactory Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
</div><!--header-->
<div class="contents">

<p>The interface for the string factory.  
 <a href="classas_i_string_factory.html#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a59d5d4d13a21105791e34bef5cb57e6b"><td class="memItemLeft" align="right" valign="top">virtual const void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classas_i_string_factory.html#a59d5d4d13a21105791e34bef5cb57e6b">GetStringConstant</a> (const char *data, <a class="el" href="angelscript_8h.html#ac8186f029686800b7ce36bde4a55c815">asUINT</a> length)=0</td></tr>
<tr class="memdesc:a59d5d4d13a21105791e34bef5cb57e6b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Called by engine to instantiate a string constant.  <a href="classas_i_string_factory.html#a59d5d4d13a21105791e34bef5cb57e6b">More...</a><br /></td></tr>
<tr class="separator:a59d5d4d13a21105791e34bef5cb57e6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae4ca9e666eb711671a765dba8debe8b1"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classas_i_string_factory.html#ae4ca9e666eb711671a765dba8debe8b1">ReleaseStringConstant</a> (const void *str)=0</td></tr>
<tr class="memdesc:ae4ca9e666eb711671a765dba8debe8b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Called by engine when the string constant is no longer used.  <a href="classas_i_string_factory.html#ae4ca9e666eb711671a765dba8debe8b1">More...</a><br /></td></tr>
<tr class="separator:ae4ca9e666eb711671a765dba8debe8b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae798179f4d90b30371416f8c5c522333"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classas_i_string_factory.html#ae798179f4d90b30371416f8c5c522333">GetRawStringData</a> (const void *str, char *data, <a class="el" href="angelscript_8h.html#ac8186f029686800b7ce36bde4a55c815">asUINT</a> *length) const =0</td></tr>
<tr class="memdesc:ae798179f4d90b30371416f8c5c522333"><td class="mdescLeft">&#160;</td><td class="mdescRight">Called by engine to get the raw string data for serialization.  <a href="classas_i_string_factory.html#ae798179f4d90b30371416f8c5c522333">More...</a><br /></td></tr>
<tr class="separator:ae798179f4d90b30371416f8c5c522333"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>This interface is used to manage the string constants that the scripts use. If string constants should be supported the application must implement this object and register it with <a class="el" href="classas_i_script_engine.html#ac6598c07c36652b0270b4c2d61db1f01">asIScriptEngine::RegisterStringFactory</a>. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="ae798179f4d90b30371416f8c5c522333"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae798179f4d90b30371416f8c5c522333">&#9670;&nbsp;</a></span>GetRawStringData()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual int asIStringFactory::GetRawStringData </td>
          <td>(</td>
          <td class="paramtype">const void *&#160;</td>
          <td class="paramname"><em>str</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="angelscript_8h.html#ac8186f029686800b7ce36bde4a55c815">asUINT</a> *&#160;</td>
          <td class="paramname"><em>length</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">str</td><td>The same pointer returned by <a class="el" href="classas_i_string_factory.html#a59d5d4d13a21105791e34bef5cb57e6b">GetStringConstant</a> </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">data</td><td>A pointer to the data buffer that should be filled with the content </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">length</td><td>A pointer to the variable that should be set with the length of the data </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A negative value on error.</dd></dl>
<p>The engine will first call this with <em>data</em> set to null to retrieve the size of the buffer that must be allocated. Then the engine will call the method once more with the allocated data buffer to be filled with the content. The length should always be informed in number of bytes. </p>

</div>
</div>
<a id="a59d5d4d13a21105791e34bef5cb57e6b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a59d5d4d13a21105791e34bef5cb57e6b">&#9670;&nbsp;</a></span>GetStringConstant()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual const void* asIStringFactory::GetStringConstant </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="angelscript_8h.html#ac8186f029686800b7ce36bde4a55c815">asUINT</a>&#160;</td>
          <td class="paramname"><em>length</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>The content of the string </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>The length in bytes of the data buffer </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The pointer to the instantiated string constant</dd></dl>
<p>The contents of <em>data</em> must be copied by the string factory, as the engine will not keep a copy of the original data.</p>
<p>The string factory can cache and return a pointer to the same instance multiple times if the same string content is requested multiple times. If the same instance is returned multiple times the string factory must keep track of the number of instances as <a class="el" href="classas_i_string_factory.html#ae4ca9e666eb711671a765dba8debe8b1">ReleaseStringConstant</a> will be called for each of them. </p>

</div>
</div>
<a id="ae4ca9e666eb711671a765dba8debe8b1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae4ca9e666eb711671a765dba8debe8b1">&#9670;&nbsp;</a></span>ReleaseStringConstant()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual int asIStringFactory::ReleaseStringConstant </td>
          <td>(</td>
          <td class="paramtype">const void *&#160;</td>
          <td class="paramname"><em>str</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">str</td><td>The same pointer returned by <a class="el" href="classas_i_string_factory.html#a59d5d4d13a21105791e34bef5cb57e6b">GetStringConstant</a> </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A negative value on error.</dd></dl>
<p>The engine will call this method for each pointer returned by <a class="el" href="classas_i_string_factory.html#a59d5d4d13a21105791e34bef5cb57e6b">GetStringConstant</a>. If the string factory returns a pointer to the same instance multiple times, then the string instance can only be destroyed when the last call to ReleaseStringConstant for that pointer is made. </p>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="angelscript_8h.html">angelscript.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="classas_i_string_factory.html">asIStringFactory</a></li>
    <li class="footer">Generated on Sun Sep 22 2019 11:47:56 for AngelScript by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.16 </li>
  </ul>
</div>
</body>
</html>
